
package com.ufps.cuatro.modelo.representacion;

import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.modelo.old.ComponenteBeans;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGenerador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorModeloAsociado;
import com.ufps.cuatro.util.base.ComponenteBase;
import com.ufps.cuatro.util.base.ComponenteBaseStandar;
import com.ufps.cuatro.util.base.ObjectBase;
import com.ufps.cuatro.util.generadores.GeneradorComponentes;
import java.io.File;

/**
 *
 * @param <T> 
 * @author Carlos A. Torres C. 
 */
public class ModeloAsociado extends ObjectBase{
    private static final long serialVersionUID = 2400852121557577176L;
    
    /**
     * 
     */
    public final static int MODO_INDEFINIDO = -1;
    /**
     * 
     */
    public final static int MODO_COLLECTION = 1;
    /**
     * 
     */
    public final static int MODO_ARRAY = 2;
    
    private ComponenteDistribuidor objComponenteParent;    
    private ComponenteDistribuidorModeloAsociado objComponenteDistribuidorModeloAsociado;  
    
    private String strName;
    private File objFileOutput = null;
    private int modo;
    
    private TipoColeccionModeloAsociado eTipoColeccion;

    /**
     * 
     */
    public ModeloAsociado() {
    }
    
    /**
     * 
     * @param eTipoColeccion 
     * @param objComponenteParent
     * @param modo  
     */
    public ModeloAsociado(TipoColeccionModeloAsociado eTipoColeccion, ComponenteDistribuidor objComponenteParent, int modo) {
        this.eTipoColeccion = eTipoColeccion;
        this.objComponenteParent = objComponenteParent;       
        this.modo = modo;                
        if(eTipoColeccion == TipoColeccionModeloAsociado.eAbstractList){            
        }
    }

    /**
     * 
     * @return
     */
    public ComponenteDistribuidor getObjComponenteParent() {
        return objComponenteParent;
    }

    /**
     * 
     * @param objComponenteParent
     */
    public void setObjComponenteParent(ComponenteDistribuidor objComponenteParent) {
        this.objComponenteParent = objComponenteParent;
    }

    /**
     * 
     * @return
     */
    public ComponenteBeans getObjComponenteBeansKey() {
      if(objComponenteDistribuidorModeloAsociado != null){
            return objComponenteDistribuidorModeloAsociado.getObjComponenteDistribuidorKey().getObjComponenteBeans();
      }else{
            UtilRender.printlnConsole("Componente Distribuidor Modelo asociado Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
       return null;
    }

    /**
     * 
     * @return
     */
    public ComponenteBeans getObjComponenteBeansObject() {
       if(objComponenteDistribuidorModeloAsociado != null){
            return objComponenteDistribuidorModeloAsociado.getObjComponenteDistribuidorObject().getObjComponenteBeans();
        }  
       else{
            UtilRender.printlnConsole("Componente Modelo asociado Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
       return null;
    }

    /**
     * 
     * @return
     */
    public ComponenteDistribuidor getObjComponenteDistribuidorObject() {
       if(objComponenteDistribuidorModeloAsociado != null){
            return objComponenteDistribuidorModeloAsociado.getObjComponenteDistribuidorObject();
        }
       else{
            UtilRender.printlnConsole("Componente Modelo asociado Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
       return null;
    }

    /**
     * 
     * @param objComponenteDistribuidorObject
     */
    public void setObjComponenteDistribuidorObject(ComponenteDistribuidor objComponenteDistribuidorObject) {        
        try{
            objComponenteDistribuidorModeloAsociado.setObjComponenteDistribuidorObject(objComponenteDistribuidorObject);
        }catch(java.lang.NullPointerException ex){}
        
    }

    /**
     * 
     * @return
     */
    public ComponenteDistribuidor getObjComponenteDistribuidorKey() {
       if(objComponenteDistribuidorModeloAsociado != null){
            return objComponenteDistribuidorModeloAsociado.getObjComponenteDistribuidorKey();
        }
       else{
            UtilRender.printlnConsole("Componente Modelo asociado Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
       return null;
    }

    /**
     * 
     * @param objComponenteDistribuidorKey
     */
    public void setObjComponenteDistribuidorKey(ComponenteDistribuidor objComponenteDistribuidorKey) {
        try{
            objComponenteDistribuidorModeloAsociado.setObjComponenteDistribuidorKey(objComponenteDistribuidorKey);
        }catch(java.lang.NullPointerException ex){}
        
    }

    public ComponenteDistribuidorModeloAsociado getObjComponenteDistribuidorModeloAsociado() {
        return objComponenteDistribuidorModeloAsociado;
    }

    public void setObjComponenteDistribuidorModeloAsociado(ComponenteDistribuidorModeloAsociado objComponenteDistribuidorModeloAsociado) {
        try{
            this.objComponenteDistribuidorModeloAsociado = objComponenteDistribuidorModeloAsociado;
            strName = devolverNombre();
        }catch(java.lang.NullPointerException ex){}
        
    }
    
    private String devolverNombre(){        
        String strTempName = objComponenteDistribuidorModeloAsociado.getName();
        String strNewName = objComponenteDistribuidorModeloAsociado.getName();
        String strNameWindow = objComponenteDistribuidorModeloAsociado.getObjComponenteBase().getObjClassSwing().getSimpleName();
        
        if(objComponenteParent instanceof ComponenteDistribuidorGenerador){
            ComponenteDistribuidorGenerador objComponenteDistribuidorGenerador = (ComponenteDistribuidorGenerador) objComponenteParent;
            strNewName = objComponenteDistribuidorGenerador.getObjTipoDato().getObjClass().getSimpleName();
        }
        else{        
            ComponenteBase objComponenteBase = GeneradorComponentes.devolverComponenteBaseGenerador(objComponenteParent);
            if(objComponenteBase instanceof ComponenteBaseStandar){
                ComponenteBaseStandar objComponenteBaseStandar = (ComponenteBaseStandar) objComponenteBase;
                strNewName = objComponenteBaseStandar.getObjClassSwing().getSimpleName();            
            }        
        }
        return strTempName.replaceAll(strNameWindow, strNewName);
    }
    
    

    /**
     * 
     * @return
     */
    public String getStrName() {
        return strName;
    }

    /**
     * 
     * @param strName
     */
    public void setStrName(String strName) {
        this.strName = strName;
    }
    
    /**
     * Devuelve el Archivo de Salida del Código Fuente.
     * @return Archivo de Salida del Código Fuente.
     */
    public File getObjFileOutput() {
        return objFileOutput;
    }

    /**
     * Establece el Archivo de Salida del Código Fuente.
     * @param objFileOutput Archivo de Salida del Código Fuente.
     */
    public void setObjFileOutput(File objFileOutput) {
        this.objFileOutput = objFileOutput;
    }

    /**
     * 
     * @return
     */
    public TipoColeccionModeloAsociado geteTipoColeccion() {
        return eTipoColeccion;
    }

    /**
     * 
     * @param eTipoColeccion
     */
    public void seteTipoColeccion(TipoColeccionModeloAsociado eTipoColeccion) {
        this.eTipoColeccion = eTipoColeccion;
    }

    /**
     * 
     * @return
     */
    public int getModo() {
        return modo;
    }

    /**
     * 
     * @param modo
     */
    public void setModo(int modo) {
        this.modo = modo;
    }
    
    
}
